//
//  TSCMyBlockBtn.m
//  Tsc_IOS
//
//  Created by Rio on 15-5-22.
//  Copyright (c) 2015年 idream. All rights reserved.
//
// 支持不使用UIButton原生态的addTarget()方法，而使用自定义的block进行点击事件注册。这样做的好处是：给按钮注册点击事件时，不用非得传入target、@selector。使用场景：给自定义导航栏右侧的按钮注册事件
//
// @author Rio
// @date 2015-05-22

#import "TSCMyClickBtn.h"

@implementation TSCMyClickBtn {
}

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        // Initialization code
    }
    return self;
}

/*
 // Only override drawRect: if you perform custom drawing.
 // An empty implementation adversely affects performance during animation.
 - (void)drawRect:(CGRect)rect
 {
 // Drawing code
 }
 */

- (void) touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
    [super touchesEnded:touches withEvent:event];
    
    
    // 有效性检查：如果按钮的x、y存在负值，则将导致负数区域（即左上角超出父view的区域）无法响应点击事件
    if (self.frame.origin.x < 0 || self.frame.origin.y < 0) {
        NSLog(@"[W]%s:使用自定义按钮时捕捉到点击事件结束，但发现该按钮的frame中存在负数的x，或者负数的y，这将导致该按钮的负数区域（即左上角超出父view的区域）无法响应点击事件！",__FUNCTION__);
    }
    
    // 记录鼠标结束点击时的坐标（相对于自身frame，范围为[0,0]到[w,h]
    UITouch * t = [touches anyObject];
    CGPoint ep = [t locationInView:self];
    
    // 获得按钮的宽高
    CGFloat btnW = self.frame.size.width;
    CGFloat btnH = self.frame.size.height;
    
    // 判断是否为点击事件，等同于UIControlEventTouchUpInside
    if (
        (0 <= ep.x) && (0 <= ep.y)
        &&
        (ep.x <= (0 + btnW)) && (ep.y <= (0 + btnH))
        ) {
        
        // 执行点击后的回调
        if(_btnClickedListener) {
            _btnClickedListener(self);
        }
    }
}

@end
